package com.jdk21.core.config;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Slf4j
@Aspect
@Component
public class CheckAdminAspect {

//    @Resource
//    private UserLoginMapper userLoginMapper;
//    @Resource
//    private UserMapper userMapper;


    @Before("@annotation(com.jdk21.core.config.CheckAdminLogin) && execution(public * com.jdk21.core.controller.*.*(..))")
    public void checkUserLogin(JoinPoint joinPoint) throws Throwable {
//        String token = getToken(joinPoint);
//        if (StringUtils.isBlank(token)) {
//            throw new CheckUserLoginException();
//        }
//        UserLoginDO userLoginDO = userLoginMapper.getByToken(token);
//        if (userLoginDO == null) {
//            throw new CheckUserLoginException();
//        }
//        updateActiveTime(userLoginDO);
//        if (!Objects.equals(userLoginDO.getLoginStatus(), LoginStatusEnum.LOGGED_IN.getCode())) {
//            throw new CheckUserLoginException();
//        }
//        checkAdmin(userLoginDO);
    }

//    private void checkAdmin(UserLoginDO userLoginDO) {
//        Long userId = userLoginDO.getUserId();
//        UserDO userDO = userMapper.getById(userId);
//        if (userDO == null) {
//            throw new CheckUserLoginException();
//        }
//        String roleList = userDO.getRoleList();
//        log.info("userId:{} openId:{} roleList:{}", userDO.getId(), userDO.getOpenId(), userDO.getRoleList());
//        if (StringUtils.isBlank(userDO.getRoleList())) {
//            throw new CheckAdminLoginException();
//        }
//        List<Integer> roleIdList = JSON.parseArray(roleList, Integer.class);
//        boolean authorized = false;
//        for (Integer roleId : roleIdList) {
//            if (Objects.equals(roleId, UserRoleTypeEnum.ADMIN.getCode())) {
//                authorized = true;
//                break;
//            }
//        }
//        if (!authorized) {
//            throw new CheckAdminLoginException();
//        }
//    }
//
//    private void updateActiveTime(UserLoginDO userLoginDO) {
//        UserLoginDO updateUserLoginDO = new UserLoginDO();
//        updateUserLoginDO.setId(userLoginDO.getId());
//        updateUserLoginDO.setActiveTime(new Date());
//        int update = userLoginMapper.updateById(updateUserLoginDO);
//        log.info("userId:{} 更新activeTime:{} update:{}", userLoginDO.getUserId(), JodaTimeUtil.format(updateUserLoginDO.getActiveTime()), update);
//    }

//    private String getToken(JoinPoint joinPoint) {
//        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//        if (servletRequestAttributes == null) {
//            throw new CheckUserLoginException();
//        }
//        HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest();
//
//        String authorization = httpServletRequest.getHeader("Authorization");
//        if (StringUtils.isNotBlank(authorization)) {
//            return authorization;
//        }
//        return httpServletRequest.getHeader("authorization");
//    }
}
